<?php

namespace utils\tools;

use think\facade\Cache;
use think\facade\Log;

class VerificationCode
{
    /**
     * 生成指定位数的随机数字验证码
     *
     * @param int $length 验证码长度
     * @return string
     */
    public static function genCode(int $length = 6): string
    {
        $code = '';
        for ($i = 0; $i < $length; $i++) {
            $code .= mt_rand(0, 9);
        }
        return $code;
    }

    /**
     * 存储验证码到缓存
     *
     * @param string $key 缓存键名
     * @param string $code 验证码
     * @param int $expire 有效期（秒）
     * @return bool
     */
    public static function cacheCode(string $key, string $code, int $expire = 300): bool
    {
        return Cache::set($key, $code, $expire);
    }

    /**
     * 验证用户提交的验证码
     *
     * @param string $key 缓存键名
     * @param string $inputCode 用户输入的验证码
     * @return bool
     */
    public static function verifyCode(string $key, string $inputCode): bool
    {
        $storedCode = Cache::get($key);
        trace('存储的验证码：'.$storedCode, 'debug');

        // 验证码使用后即失效，防止重复使用
        Cache::delete($key);

        trace(' 用户输入：'.$inputCode, 'debug');

        if($storedCode && $storedCode === $inputCode){
            return true;
        } else {
            return false;
        }
    }
}